package network;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class TcpEchoClient {
        private Socket socket = null;

        public TcpEchoClient (String serverIp, int severPort) throws IOException {
            // 此处可以把这里的ip 和port 直接传给socket 对象.
            // 由于Tcp是有连接的, 因此socket里面就会保存这些信息
            // 因此 TcpEchoClient 就不需要保存这些两个类变量.
            socket = new Socket(serverIp,severPort);
        }

        public void start(){
            System.out.println("客户端启动");
            try (InputStream inputStream = socket.getInputStream();
                 OutputStream outputStream = socket.getOutputStream()){

                Scanner scannerConsole = new Scanner(System.in);
                Scanner scannerNetwork = new Scanner(inputStream);
                PrintWriter writer = new PrintWriter(outputStream);

                while(true){
                    System.out.println("--->");
                    // 这里和UDP的客户端类似
                    // 1. 从控制台读取输入的字符串, 也就是需要发送给服务器的请求信息
                    if(!scannerConsole.hasNext()){
                        break;
                    }
                    String request = scannerConsole.next();
                    // 2. 把请求发送给服务器, 这里需要使用 println来发送, 保证发送的信息是有\n的
                    writer.println(request);  // 这里可能有问题 客户端的请求没有正确发送出去,
                                              // 又由于服务器中会打印日志, 说明客户端发送的有问题
                                              // 缓冲区对于程序的影响是较大的.
                                              // 解决方法: 1. flush 方法, 冲刷缓存区
                                              //
                    writer.flush(); // 确保数据真的发出去了
                    // 3. 从服务器读取响应, 这里是和服务器返回响应的逻辑对应
                    String response = scannerNetwork.next();
                    // 4. 把响应显示出来
                    System.out.println(response);
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

    public static void main(String[] args) throws IOException {
        TcpEchoClient client = new TcpEchoClient("127.0.0.1",9090);
        client.start();
    }
}
